home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / biz / haage / WarpUP_V40Upd.lha / WarpUP-WarpOS / PowerUpEmu / README < prev    next >
Text File  |  1999-04-14  |  12KB  |  392 lines

  1.  
  2. ---------- ppclibemu V0.6  - The ppc.library emulation for WarpOS ----------
  3.  
  4.  
  5. INTRODUCTION
  6.     The importance of WarpOS for PowerPC equipped Amigas is constantly
  7.     increasing. OS3.5 will support WarpOS and future PowerPC G3/G4
  8.     boards will also be based on this kernel.
  9.  
  10.     Some may like it and some not. I like features in both kernels,
  11.     and in my opinion there must be a possibility to run most of the old
  12.     PowerUp software under WarpOS in future. I'm also sick of rebooting
  13.     my system, when switching the kernel. So the only solution is:
  14.     ppc.library emulation under WarpOS!
  15.  
  16.  
  17. FEATURES
  18.     Since V0.5 you can start ELF objects directly (from shell or
  19.     from Workbench). The emulation library installs a LoadSeg()-patch
  20.     which detects and starts ELF objects. But in opposition to the
  21.     original library, the patch can be removed when the library is
  22.     expunged ("avail flush"). ;)
  23.  
  24.     Of course you can also start ELF objects by using SAS/C's RunElf,
  25.     Ralph Schmidt's PPCLoad or vbcc's PPCRun.
  26.  
  27.     Since V0.6 the whole PowerUp message system is supported. It's
  28.     slower than the original, but there is still room for improvement.
  29.  
  30.     The following functions of the original ppc.library are supported:
  31.       o PPCLoadObject
  32.       o PPCUnLoadObject
  33.       o PPCRunObject
  34.       o PPCAllocMem (MEMF_NOCACHESYNCxxx not supported)
  35.       o PPCFreeMem
  36.       o PPCAllocVec (MEMF_NOCACHESYNCxxx not supported)
  37.       o PPCFreeVec
  38.       o PPCDebugMode (private, doesn't work like the original)
  39.       o PPCCreateTask
  40.       o PPCDeleteTask
  41.       o PPCGetTaskAttrs (not all tags supported)
  42.       o PPCGetAttrs (PPCINFOTAG_EXCEPTIONHOOK not supported)
  43.       o PPCReadLong
  44.       o PPCWriteLong
  45.       o PPCGetObjectAttrs
  46.       o PPCWriteLongFlush
  47.       o PPCReadWord
  48.       o PPCWriteWord
  49.       o PPCReadByte
  50.       o PPCWriteByte
  51.       o PPCCacheClearE
  52.       o PPCCacheInvalidE
  53.       o PPCCacheTrashE
  54.       o PPCLoadObjectTagList
  55.       o PPCCreatePort
  56.       o PPCDeletePort
  57.       o PPCObtainPort
  58.       o PPCReleasePort
  59.       o PPCWaitPort
  60.       o PPCCreateMessage
  61.       o PPCDeleteMessage
  62.       o PPCGetMessage
  63.       o PPCGetMessageAttr
  64.       o PPCReplyMessage
  65.       o PPCSendMessage
  66.  
  67.     The following functions of the original PowerUp kernel are supported:
  68.       o PPCAdd64
  69.       o PPCAdd64p
  70.       o PPCAddHead
  71.       o PPCAddHeadSync (implementation might be incorrect)
  72.       o PPCAddTail
  73.       o PPCAddTailSync (implementation might be incorrect)
  74.       o PPCAllocMem (NOCACHESYNCM68K simulated by allocating chip RAM)
  75.       o PPCAllocPooled (No pooled mem under WOS, same as PPCAllocMem)
  76.       o PPCAllocSignal
  77.       o PPCAllocVec (NOCACHESYNCM68K simulated by allocating chip RAM)
  78.       o PPCAllocVecPooled (No pooled mem under WOS, same as PPCAllocVec)
  79.       o PPCAnd64
  80.       o PPCAnd64p
  81.       o PPCAsl64
  82.       o PPCAsl64p
  83.       o PPCAsr64
  84.       o PPCAsr64p
  85.       o PPCAttemptSemaphore
  86.       o PPCAttemptSemaphoreByName
  87.       o PPCAttemptSemaphoreShared
  88.       o PPCCacheFlush
  89.       o PPCCacheFlushAll
  90.       o PPCCacheInvalid
  91.       o PPCCallM68k (Flags ignored. Asynchronous calls are synchronous.)
  92.       o PPCCallOS (Flags ignored. Asynchronous calls are synchronous.)
  93.       o PPCClose
  94.       o PPCCloseLibrary
  95.       o PPCCmp64
  96.       o PPCCmp64p
  97.       o PPCCreateMessage
  98.       o PPCCreatePool
  99.       o PPCCreatePort
  100.       o PPCCreateSemaphore
  101.       o PPCCreateTimerObject
  102.       o PPCDeleteMessage
  103.       o PPCDeletePool
  104.       o PPCDeletePort
  105.       o PPCDeleteTimerObject
  106.       o PPCDeleteSemaphore
  107.       o PPCDivRem64
  108.       o PPCDivRem64p
  109.       o PPCDivs64
  110.       o PPCDivs64p
  111.       o PPCDivu64
  112.       o PPCDivu64p
  113.       o PPCEnqueue
  114.       o PPCEnqueueSync (implementation might be incorrect)
  115.       o PPCFindName
  116.       o PPCFindNameSync (implementation might be incorrect)
  117.       o PPCFindTagItem
  118.       o PPCFindTask
  119.       o PPCFinishTask
  120.       o PPCFreeMem
  121.       o PPCFreePooled
  122.       o PPCFreeSignal
  123.       o PPCFreeVec
  124.       o PPCFreeVecPooled
  125.       o PPCGetAttr
  126.       o PPCGetLibSymbol
  127.       o PPCGetMessage
  128.       o PPCGetMessageAttr
  129.       o PPCGetTagData
  130.       o PPCGetTaskAttr (not all tags supported)
  131.       o PPCGetTimerObject
  132.       o PPCInput
  133.       o PPCInsert
  134.       o PPCInsertSync (implementation might be incorrect)
  135.       o PPCLsl64
  136.       o PPCLsl64p
  137.       o PPCLsr64
  138.       o PPCLsr64p
  139.       o PPCMods64
  140.       o PPCMods64p
  141.       o PPCModu64
  142.       o PPCModu64p
  143.       o PPCMuls64
  144.       o PPCMuls64p
  145.       o PPCMulu64
  146.       o PPCMulu64p
  147.       o PPCNeg64
  148.       o PPCNeg64p
  149.       o PPCNewList
  150.       o PPCNextTagItem
  151.       o PPCObtainPort
  152.       o PPCObtainSemaphore
  153.       o PPCObtainSemaphoreByName
  154.       o PPCObtainSemaphoreShared
  155.       o PPCOpen
  156.       o PPCOpenLibrary
  157.       o PPCOr64
  158.       o PPCOr64p
  159.       o PPCOutput
  160.       o PPCRawDoFmt
  161.       o PPCRead
  162.       o PPCReleasePort
  163.       o PPCReleaseSemaphore
  164.       o PPCRemHead
  165.       o PPCRemHeadSync (implementation might be incorrect)
  166.       o PPCRemove
  167.       o PPCRemoveSync (implementation might be incorrect)
  168.       o PPCRemTail
  169.       o PPCRemTailSync (implementation might be incorrect)
  170.       o PPCReplyMessage
  171.       o PPCRevision
  172.       o PPCSeek
  173.       o PPCSendMessage
  174.       o PPCSetSignal
  175.       o PPCSetTaskAttr (not all tags supported)
  176.       o PPCSetTimerObject
  177.       o PPCSignal (might not work, because of different task definitions)
  178.       o PPCSub64
  179.       o PPCSub64p
  180.       o PPCVersion
  181.       o PPCWait
  182.       o PPCWaitPort
  183.       o PPCWrite
  184.       o PPCXor64
  185.       o PPCXor64p
  186.       o memcpy
  187.       o strcmp
  188.       o strcpy
  189.       o strlen
  190.       o __adddi3
  191.       o __anddi3
  192.       o __ashldi3
  193.       o __ashrdi3
  194.       o __cmpdi2
  195.       o __divdi3
  196.       o __fixdfdi
  197.       o __fixsfdi
  198.       o __fixunsdfdi
  199.       o __fixunssfdi
  200.       o __floatdidf
  201.       o __floatdisf
  202.       o __floatunsdidf
  203.       o __iordi3
  204.       o __lmulq
  205.       o __lshldi3
  206.       o __lshrdi3
  207.       o __moddi3
  208.       o __muldi3
  209.       o __negdi2
  210.       o __qdivrem
  211.       o __subdi3
  212.       o __ucmpdi2
  213.       o __udivdi3
  214.       o __umoddi3
  215.       o __xordi3
  216.  
  217.     Unimplemented M68k functions will return with d0=0 and PPC
  218.     functions return with r3=0.
  219.  
  220.     These are still missing:
  221.       o Asynchronous 68k function calls
  222.       o Exception handling, debugger support
  223.       o Loading an ELF object from a PowerPC task
  224.       o Port lists
  225.       o Pooled memory support for M68k (missing in WarpOS)
  226.       o PPCprintf and other vararg functions
  227.       o PPCDoMethodA/SuperMethodA
  228.       o Some tags are missing for the GetAttrs and GetTaskAttrs functions.
  229.  
  230.  
  231. POWERUP DEVELOPERS
  232.     If you are the author of a program, which doesn't work under
  233.     emulation, then I need your help! Please try to determine the
  234.     reason for crashes or failures in your source and tell me about the
  235.     problem. I think the whole Amiga community would be very grateful!
  236.  
  237.     By using your source and the debugging facilities of ppclibemu it
  238.     should be not too hard. Refer to the BUGS section for debugging
  239.     informations.
  240.  
  241.  
  242. REQUIREMENTS
  243.     o 68040 or 68060
  244.     o CyberstormPPC or BlizzardPPC
  245.     o WarpOS V4 (powerpc.library V15)
  246.  
  247.  
  248. BLIZZARD PPC NOTES
  249.     You will get some problems on a BPPC with a new flash ROM, because
  250.     the original ppc.library is a resident module and will be
  251.     initialized during reset.
  252.  
  253.     The only chance is to use BPPCFix (should be included in the
  254.     WarpOS V4 distribution) and install another resident module, which
  255.     removes the ppc.library from the system before it can initialize
  256.     itself. Refer to INSTALLATION for further informations.
  257.  
  258.     Afterwards you have a 'clean' system, which allows you to start
  259.     WarpOS without using a Terminator (as on a CSPPC). Please use a
  260.     Terminator setting of '1' or '0'. WarpOS will not work with the
  261.     emulation in terminator-mode '2'.
  262.  
  263.  
  264. INSTALLATION
  265.     Save your original ppc.library:
  266.  
  267.       > copy libs:ppc.library libs:ppc.library.orig
  268.  
  269.     Copy the ppc.library emulation from this directory to libs:
  270.  
  271.       > copy ppc.library libs:
  272.  
  273.     Set the environment variable powerpc/NoPatch to "1":
  274.  
  275.       > setenv powerpc/NoPatch 1
  276.       > copy ENV:powerpc/NoPatch ENVARC:
  277.  
  278.     Optionally, all these steps can be done automatically, by executing
  279.     the INSTALL script:
  280.       > execute INSTALL
  281.  
  282.     BLIZZARD PPC OWNERS ONLY:
  283.       Disable the original ppc.library resident module with
  284.         > BPPCFix install
  285.  
  286.       If you want to disable the original library for a longer
  287.       time, you may also put the BPPCFix into your S:Startup-Sequence:
  288.         ; $VER: Startup-Sequence_HardDrive 40.2 (25.2.93)
  289.         ; Startup-Sequence for hard drive systems
  290.         BPPCFix install reboot
  291.         [...]
  292.  
  293.       If the fix is not already installed, it will do so and
  294.       automatically reboot the system.
  295.  
  296.     Finally reboot your system to flush the old ppc.library.
  297.  
  298.  
  299. USAGE
  300.     Either you install the emulation ppc.library permamently in LIBS:
  301.     or use "loadlib" to temporarily activate the emulation library. It
  302.     can be completely flushed from the system at any time, by using
  303.     "avail flush" (provided that no application needs it anymore).
  304.  
  305.     For a check, you might want to try some of the supplied test ELF
  306.     objects, which were compiled by vbcc-ppc. For example:
  307.  
  308.       > hello_world.elf
  309.       Hello World!
  310.  
  311.     or:
  312.       > runelf hello_world.elf
  313.       Hello World!
  314.  
  315.     timerobj.elf demonstrates the usage of TimerObjects.
  316.  
  317.     objattr_demo is a 68k program for testing the PPCGetObjectAttrs()
  318.     function. For example, you can try to list all symbols of
  319.     hello_world.elf:
  320.  
  321.       > objattr_demo hello_world.elf
  322.       0x00000000      0x00000000
  323.       0x00000000      0x00000000
  324.       0x00000000      0x00000000
  325.       0x00000000      0x00000000
  326.       0x00000000      0x00000000
  327.       0x00000110      0x00000000      __error
  328.       0x000001F8      0x00000100      parse_cli_args
  329.       [...]
  330.  
  331.     msgtest is a 68k program which starts an asynchronous PPC task
  332.     (msgtest.elf) to test the message system. It sends one message
  333.     to the PPC task and waits for reply.
  334.  
  335.  
  336. COMPATIBILITY
  337.     The emulation is nearly complete, but there is still a lot of
  338.     stuff, which doesn't run. I would not be surprised if the compati-
  339.     bility is far below 50%. Though, since the implementation of the
  340.     message system emulation in V0.6, there are first life-signs from
  341.     some of the 'difficult' candidates. For example M.A.M.E and IsisPPC
  342.     are starting now, but refuse to work some time later. Most demos
  343.     which run under PowerUp, e.g. VA_OffShore, don't work neither. I
  344.     don't know which strange techniques they are using and have not the
  345.     slightest chance to find it out.
  346.  
  347.     I don't have the time for testing numerous PowerUp programs,
  348.     but the following should work:
  349.       o ADoomPPC (when started by runelf, use "setenv DOOMWADDIR")
  350.       o VDoom (PPCLoad or old PPCRun only!)
  351.       o ADoM, HereticPPC, HexenPPC
  352.       o Some demos: VAEDies and VAGhost
  353.       o musicin, musicout
  354.       o Packers: unlzx, lha, unrar, uuencode, uudecode, etc.
  355.       o Emulators: PPCFrodo, AmigaVGBPPC, PCEmulator
  356.       o qmap
  357.       o SManPPC
  358.       o PowerView
  359.       o Benoit
  360.       o Reflections 4.3
  361.       o PowerUp developer examples
  362.       o PowerUp demos: Plane, Mountain, Memtest
  363.  
  364.  
  365. BUGS
  366.     There are still some functions of ppc.library and the PowerUp kernel
  367.     which are not supported (and there might be a lot of bugs in the
  368.     functions which *are* supported :), so I'm not interested in bug
  369.     reports like: "Program-xyz doesn't work...".
  370.  
  371.     If you get any difficulties (I'm sure you will :), then try to
  372.     isolate the problem by enabling the debugging mode. You can
  373.     enable debugging mode on the 68k-side by using the ppcdbmode
  374.     utility:
  375.       ppcdbmode 1      - enables all error requesters
  376.       ppcdbmode 0x8000 - enables serial debugging (you can use Sushi)
  377.     (or ppcdbmode 0x8001 to enable both).
  378.  
  379.     You can get full serial debugging (kernel emulation too) by
  380.     exchanging ppc.library with ppc.library.debug. This is the
  381.     recommended method - but execution will be *much* slower.
  382.  
  383.     If you think that you found a bug, then send me your serial debugging
  384.     output, which you got from Sushi or a terminal. Also give me the name
  385.     of the program and the arguments used. You should be able to determine
  386.     by yourself, if it's a real bug or only an unimplemented function
  387.     which causes the problems.
  388.  
  389.  
  390.  
  391. Frank Wille                  13-Apr-1999                frank@phoenix.owl.de
  392.